package string.intern;

/**
 * <P> @Author: ideaAdmin
 * <P> TODO: Class
 * <P> TODO:
 * <P> Date: 2022/3/20:10:42
 * <P> Description:
 */

public class InternTest1 {
    public static void main(String[] args) {
        String s = new String("1");
        //字符串常量池中的已经存在“1”
        s.intern();
        String  s2 = "1";
        System.out.println(s == s2);
        //jdk6:false jdk7/8:false

        String s3 =  new String("1") + new String("1");
        //s3的变量地址为new String()
        //指向完成上面的代码后 并不会在常量池中生成 “11”

        s3.intern();
        //在常量池中生成“11”的 如何理解
            //jdk6 创建一个新的对象
            //jdk7/8 此时常量池中并没有创建"11" 而是创建一个指向堆中的s3的地址引用
        String s4 = "11";
        //这里s4使用的 上一行生成的地址 指向的是常量池中的 “11” 的s3地址 所以会相等
        System.out.println(s3==s4);//jdk6:false jdk7/8:true
    }
}
